<?php

namespace app\controller;

use app\BaseController;
use app\model\Position;
use think\facade\View;
use think\facade\Request;

/**
 * 岗位管理控制器
 */
class PositionController extends BaseController
{
    /**
     * 岗位列表页面
     * @return \think\response\View
     */
    public function index()
    {
        return View::fetch('position/index');
    }

    /**
     * 获取岗位列表
     * @return \think\response\Json
     */
    public function getList()
    {
        try {
            // 获取部门ID（可选）
            $departmentId = Request::param('department_id');

            // 获取岗位列表
            if ($departmentId) {
                $positions = Position::getByDepartmentId($departmentId);
            } else {
                $positions = Position::getList();
            }

            return $this->success($positions, '获取成功');
        } catch (\Exception $e) {
            return $this->error($e->getMessage());
        }
    }

    /**
     * 添加岗位
     * @return \think\response\Json
     */
    public function add()
    {
        try {
            // 获取请求参数
            $params = Request::param();

            // 验证参数
            $cleanParams = $this->validatePosition($params);

            // 添加岗位
            $id = Position::add($cleanParams);

            return $this->success(['id' => $id], '添加成功');
        } catch (\Exception $e) {
            return $this->error($e->getMessage());
        }
    }

    /**
     * 更新岗位
     * @param int $id 岗位ID
     * @return \think\response\Json
     */
    public function update($id)
    {
        try {
            // 获取请求参数
            $params = Request::param();

            // 验证参数
            $cleanParams = $this->validatePosition($params);

            // 更新岗位
            Position::updateById($id, $cleanParams);

            return $this->success([], '更新成功');
        } catch (\Exception $e) {
            return $this->error($e->getMessage());
        }
    }

    /**
     * 删除岗位
     * @param int $id 岗位ID
     * @return \think\response\Json
     */
    public function delete($id)
    {
        try {
            // 删除岗位
            Position::deleteById($id);

            return $this->success([], '删除成功');
        } catch (\Exception $e) {
            return $this->error($e->getMessage());
        }
    }

    /**
     * 验证岗位参数
     * @param array $params 岗位参数
     * @return array 清理后的参数
     * @throws \Exception
     */
    private function validatePosition(array $params)
    {
        // 验证岗位名称
        if (!isset($params['name']) || empty(trim($params['name']))) {
            throw new \Exception('岗位名称不能为空');
        }
        
        // HTML转义防止XSS
        $params['name'] = htmlspecialchars(trim($params['name']), ENT_QUOTES, 'UTF-8');
        
        if (strlen($params['name']) > 100) {
            throw new \Exception('岗位名称不能超过100个字符');
        }

        // 验证部门ID
        if (!isset($params['department_id']) || !is_numeric($params['department_id']) || $params['department_id'] <= 0) {
            throw new \Exception('部门ID必须是正整数');
        }

        // 验证岗位描述
        if (isset($params['description'])) {
            $params['description'] = htmlspecialchars(trim($params['description']), ENT_QUOTES, 'UTF-8');
            if (strlen($params['description']) > 500) {
                throw new \Exception('岗位描述不能超过500个字符');
            }
        }
        
        return $params; // 返回清理后的数据
    }
}